from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class MedicalDipCoreDiseaseListIn(BaseModel):
    """存储DIP正式目录相关信息的列表参数"""
    id: Union[int, None, EmptyStrToNone] = Query()  # 主键ID，用于唯一标识每条记录
    dip_group_code: Union[str, None, EmptyStrToNone] = Query()  # DIP分组编码，用于标识DIP分组
    diagnosis_code: Union[str, None, EmptyStrToNone] = Query()  # 诊断编码，用于标识具体诊断
    diagnosis_name: Union[str, None, EmptyStrToNone] = Query()  # 诊断名称，对应诊断编码的具体名称
    operation_code_adjustment: Union[str, None, EmptyStrToNone] = Query()  # 操作编码调整，对操作编码的调整信息
    operation_name: Union[str, None, EmptyStrToNone] = Query()  # 操作名称，对应操作的具体名称
    disease_score: Union[str, None, EmptyStrToNone] = Query()  # 病种分值，该病种对应的分值
    city_average_cost: Union[str, None, EmptyStrToNone] = Query()  # 全市均次费用，全市该病种的平均费用
    cost_range_value: Union[str, None, EmptyStrToNone] = Query()  # 费用区间值，该病种费用的区间范围
    disease_type: Union[str, None, EmptyStrToNone] = Query()  # 病种类型，标识病种所属类型
    is_primary_disease: Union[str, None, EmptyStrToNone] = Query()  # 是否基层病种，1表示是，0表示否
    is_duplicate_disease: Union[str, None, EmptyStrToNone] = Query()  # 是否重复病种，1表示是，0表示否
    duplicate_disease_special_note: Union[str, None, EmptyStrToNone] = Query()  # 重复病种特殊说明，对重复病种的特殊情况说明
    remarks: Union[str, None, EmptyStrToNone] = Query()  # 备注，其他相关备注信息


class MedicalDipCoreDiseaseExportIn(MedicalDipCoreDiseaseListIn):  
    """存储DIP正式目录相关信息的导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class MedicalDipCoreDiseaseDetailIn(BaseModel):
    """存储DIP正式目录相关信息的详情参数"""
    id: int = Query(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalDipCoreDiseaseAddIn(BaseModel):
    """存储DIP正式目录相关信息的新增参数"""
    dip_group_code: str  # DIP分组编码，用于标识DIP分组
    diagnosis_code: str  # 诊断编码，用于标识具体诊断
    diagnosis_name: str  # 诊断名称，对应诊断编码的具体名称
    operation_code_adjustment: str  # 操作编码调整，对操作编码的调整信息
    operation_name: str  # 操作名称，对应操作的具体名称
    disease_score: str  # 病种分值，该病种对应的分值
    city_average_cost: str  # 全市均次费用，全市该病种的平均费用
    cost_range_value: str  # 费用区间值，该病种费用的区间范围
    disease_type: str  # 病种类型，标识病种所属类型
    is_primary_disease: str  # 是否基层病种，1表示是，0表示否
    is_duplicate_disease: str  # 是否重复病种，1表示是，0表示否
    duplicate_disease_special_note: str  # 重复病种特殊说明，对重复病种的特殊情况说明
    remarks: str  # 备注，其他相关备注信息


class MedicalDipCoreDiseaseEditIn(BaseModel):
    """存储DIP正式目录相关信息的编辑参数"""
    dip_group_code: str  # DIP分组编码，用于标识DIP分组
    diagnosis_code: str  # 诊断编码，用于标识具体诊断
    diagnosis_name: str  # 诊断名称，对应诊断编码的具体名称
    operation_code_adjustment: str  # 操作编码调整，对操作编码的调整信息
    operation_name: str  # 操作名称，对应操作的具体名称
    disease_score: str  # 病种分值，该病种对应的分值
    city_average_cost: str  # 全市均次费用，全市该病种的平均费用
    cost_range_value: str  # 费用区间值，该病种费用的区间范围
    disease_type: str  # 病种类型，标识病种所属类型
    is_primary_disease: str  # 是否基层病种，1表示是，0表示否
    is_duplicate_disease: str  # 是否重复病种，1表示是，0表示否
    duplicate_disease_special_note: str  # 重复病种特殊说明，对重复病种的特殊情况说明
    remarks: str  # 备注，其他相关备注信息


class MedicalDipCoreDiseaseDelIn(BaseModel):
    """存储DIP正式目录相关信息的删除参数"""
    id: int = Field(gt=0)  # 主键ID，用于唯一标识每条记录


class MedicalDipCoreDiseaseOut(BaseModel):
    """存储DIP正式目录相关信息的返回信息"""
    id: Optional[int]  # 主键ID，用于唯一标识每条记录
    dip_group_code: str  # DIP分组编码，用于标识DIP分组
    diagnosis_code: str  # 诊断编码，用于标识具体诊断
    diagnosis_name: str  # 诊断名称，对应诊断编码的具体名称
    operation_code_adjustment: Optional[str] = Field(default='')  # 操作编码调整，对操作编码的调整信息
    operation_name: Optional[str] = Field(default='')  # 操作名称，对应操作的具体名称
    disease_score: str  # 病种分值，该病种对应的分值
    city_average_cost: str  # 全市均次费用，全市该病种的平均费用
    cost_range_value: str  # 费用区间值，该病种费用的区间范围
    disease_type: str  # 病种类型，标识病种所属类型
    is_primary_disease: Optional[str] = Field(default='')  # 是否基层病种，1表示是，0表示否
    is_duplicate_disease: Optional[str] = Field(default='')  # 是否重复病种，1表示是，0表示否
    duplicate_disease_special_note: Optional[str] = Field(default='')  # 重复病种特殊说明，对重复病种的特殊情况说明
    remarks: Optional[str] = Field(default='') # 备注，其他相关备注信息

    class Config:
        orm_mode = True
